package com.platform.data.handle.converter;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Objects;

/**
 * 默认属性值转换器
 *
 * @author weijun.zhu
 * @date 2025/5/11 12:11
 */
public class DefaultStringConverter {
    private static final Logger log = LoggerFactory.getLogger(DefaultStringConverter.class);

    /**
     * 数据类型转换管理器
     */
    private final DataTypeConverterHandler converterHandler = new DataTypeConverterHandler();

    /**
     * 处理属性值转换
     *
     * @param fieldName fieldName
     * @param typeEnum typeEnum
     * @param fieldValue fieldValue
     * @return {@link Object}
     */
    public Object convertToData(String fieldName, DataTypeEnum typeEnum, String fieldValue) {
        if(StringUtils.isBlank(fieldValue)){
            return null;
        }

        if(Objects.isNull(typeEnum)){
            log.warn("DefaultStringConverter.convertToData|属性赋值，该属性数据类型未定义，返回原值，属性名称：{}，属性值：{}", fieldName, fieldValue);
            return fieldValue;
        }

        DataTypeConverterHandler.TypeEnum processHandler = converterHandler.getDataProcessHandler(typeEnum.getProcessType());
        AbstractDataTypeProcessHandler handler = null;
        if(Objects.isNull(processHandler)
                || (handler = processHandler.getProcessHandler()) == null){
            log.warn("DefaultStringConverter.convertToData|属性赋值，未找到该属性数据类型处理器，返回原值，属性名称：{}，数据类型：{}[{}]，属性值：{}",
                    fieldName, typeEnum.getDesc(), typeEnum.getType(), fieldValue);
            return fieldValue;
        }
        return handler.process(typeEnum, fieldName, fieldValue);
    }
}
